package com.zzx.config;

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;

/**
 * 多租户处理器
 * 基于 company_id 字段实现多租户隔离
 * 
 * @Author: zzx
 * @Date: 2025/11/25
 */
@Slf4j
public class TenantHandler implements TenantLineHandler {

    /**
     * 获取租户ID（从当前用户上下文中获取 company_id）
     */
    @Override
    public Expression getTenantId() {
        Long companyId = UserContext.getCompanyId();
        if (companyId == null) {
            // 返回一个不存在的租户ID，使查询结果为空，防止数据泄露
            return new LongValue(-1L);
        }
        return new LongValue(companyId);
    }

    /**
     * 获取租户字段名称
     */
    @Override
    public String getTenantIdColumn() {
        return "company_id";
    }

    /**
     * 根据表名判断是否忽略多租户处理
     * 
     * @param tableName 表名
     * @return true 表示忽略，false 表示进行多租户过滤
     */
    @Override
    public boolean ignoreTable(String tableName) {
        // 系统相关表不进行租户过滤
        if (tableName.startsWith("sys_")) {
            return true;
        }
        
        // 公司表本身不需要租户过滤
        if ("t_company".equalsIgnoreCase(tableName)) {
            return true;
        }
        
        // 用户表不进行租户过滤
        if ("t_user".equalsIgnoreCase(tableName)) {
            return true;
        }
        
        return false;
    }
}
